package br.com.testepratico.controller.managedbeans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;

import br.com.testepratico.model.beans.Departamento;
import br.com.testepratico.model.beans.Funcionario;
import br.com.testepratico.model.dao.DepartamentoDAO;

@ManagedBean
@SessionScoped
public class DepartamentoBean {

	private Departamento departamento;
	private List<Departamento> departamentos;
	private DepartamentoDAO<Departamento> departamentoDAO;
	private String departamentoMensagem;

	public DepartamentoBean() {
		this.departamento = new Departamento();
		this.departamentos = new ArrayList<Departamento>();
		this.departamentoDAO = new DepartamentoDAO<Departamento>(null, Departamento.class);
	}

	public String preparaAlteracao() {
		HttpServletRequest request = getRequest();
		EntityManager manager = (EntityManager) request.getAttribute("EntityManager");
		Integer idDepartamento = Integer.parseInt(request.getParameter("idDepartamento"));

		departamentoDAO.setManager(manager);
		this.departamento = departamentoDAO.getBean(idDepartamento);

		return "formulario-departamento?faces-redirect=true";
	}

	public String adicionaOuAltera() {
		HttpServletRequest request = getRequest();
		EntityManager manager = (EntityManager) request.getAttribute("EntityManager");
		departamentoDAO.setManager(manager);

		if (this.departamento.getId() == null)
			departamentoDAO.adiciona(departamento);
		else
			departamentoDAO.altera(departamento);

		this.departamentoMensagem = "Departamento '" + departamento.getNome() + "' salvo com sucesso.";

		departamento = new Departamento();

		return "index.xhtml?faces-redirect=true";
	}

	public String remove() {
		HttpServletRequest request = getRequest();
		EntityManager manager = (EntityManager) request.getAttribute("EntityManager");
		Integer idDepartamento = Integer.parseInt(request.getParameter("idDepartamento"));

		departamentoDAO.setManager(manager);
		departamentoDAO.remove(idDepartamento);

		this.departamentoMensagem = "Departamento removido com sucesso.";

		this.departamento = new Departamento();

		return "index.xhtml?faces-redirect=true";
	}

	public String lista() {
		HttpServletRequest request = getRequest();
		EntityManager manager = (EntityManager) request.getAttribute("EntityManager");

		departamentoDAO.setManager(manager);
		this.departamentos = departamentoDAO.getBeans();

		return "lista-departamentos?faces-redirect=true";
	}

	public String listaFuncionarios() {
		HttpServletRequest request = getRequest();
		EntityManager manager = (EntityManager) request.getAttribute("EntityManager");
		Integer idDepartamento = Integer.parseInt(request.getParameter("idDepartamento"));

		departamentoDAO.setManager(manager);
		List<Funcionario> funcionarios = departamentoDAO.getFuncionarios(idDepartamento);
		FuncionarioBean.setFuncionarios(funcionarios);

		return "lista-funcionarios.xhtml?faces-redirect=true";
	}

	private HttpServletRequest getRequest() {
		return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
	}

	public Departamento getDepartamento() {
		return departamento;
	}

	public void setDepartamento(Departamento departamento) {
		this.departamento = departamento;
	}

	public List<Departamento> getDepartamentos() {
		return departamentos;
	}

	public void setDepartamentos(List<Departamento> departamentos) {
		this.departamentos = departamentos;
	}

	public String getDepartamentoMensagem() {
		return departamentoMensagem;
	}

	public void setDepartamentoMensagem(String departamentoMensagem) {
		this.departamentoMensagem = departamentoMensagem;
	}
}
